package com.dayuanit.dy15.lesson28.demo1;

public class Test {

    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName() + " main begin");

        //线程的生命周期

        //规范：创建线程的时候，务必要给线程起个名字,有利于问题的排查。因为异常堆栈信息中，
        //会有当前线程的名字，我们可以通过名字来迅速定位问题。
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                //int i = 9 / 0;
                System.out.println(Thread.currentThread().getName() + " run()  begin");
                try {
                    Thread.sleep(5 * 1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName() + " run()  end");
            }
        }, "t1");//新建
        //线程启动后，不一定就会得到CPU执行，而是要有操作系统的调度，如果一旦被调度，则会被CPU执行，
        //只会执行一个CPU周期，不管有木有执行完，都会被踢出，等待下一次的调度。
        //CPU执行线程的时候，是执行线程的run方法
        thread.start();//启动线程：具备了执行的条件或者说具备了操作系统调度的条件
//        thread.start();//同一个线程不能够start两次。

//        thread.run();//如果直接调用run方法，不报错，但是这样调用，程序是线性执行的，不会出现并行，就没有线程的特性了。

        System.out.println(Thread.currentThread().getName() + " main end");
    }
}
